﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Common.Define
{

    /** 配置文件参数结构: **/
    public class Model
    {
        public uint ModelNumber;             // 模型零件个数
        public uint JointNumber;             // 模型关节个数
        public String AssemblyState;         // 模型装配类型
        public bool AssemblyMode;            // 模型是否为装配体
        public List<uint> MovementJoints;    // 模型运动关节标号（从基座算起，基座标号为1）
        public List<double> JointInit;                 // 模型各关节初始角度值
        public List<String> ModelState;           // 模型各部件名称汇总
        public List<String> Urls;                      // 模型保存位置
        public List<JointOffset> Offset;          // 存储机器人关节偏移量
        public List<DHParameter> DHparameter;  // 关节DH参数
        public List<uint> ModelColorGroup;     // 模型色彩喷涂
        public ModelInterface InterfaceData;
    }

    /** ModelInterface配置文件参数结构: **/
    public class ModelInterface
    {
        public uint InterfaceNum;     // 固定面孔个数
        public double HoleRadius;       // 孔半径
        public double Radius;           // 固定面孔彼此形成圆半径
    }

    /** 存储机器人单个关节偏移量: **/
    public class JointOffset
    {
        public double rx;        // 转动关节x开启情况(0为关闭，1为开启)
        public double ry;        // 转动关节y开启情况(0为关闭，1为开启)
        public double rz;        // 转动关节z开启情况(0为关闭，1为开启)
        public double x;         // x轴偏移量
        public double y;         // y轴偏移量
        public double z;         // z轴偏移量
        public bool jointMode; // 关节运动方式(0为移动，1为转动)
    }

    /** 关节DH参数： **/
    public class DHParameter
    {
        public int limsup;   // 当前关节移动上限（关节角度、位移量）:
        public int liminf;   // 当前关节移动下限（关节角度、位移量）:
        public int alpha;    // DH矩阵参数alpha(两个坐标系Z轴之间的距离)
        public double a;        // DH矩阵参数a(两个坐标系Z轴之间的距离)
        public int theta;    // DH矩阵参数theta(两个坐标系Z轴之间的距离)
        public int d;        // DH矩阵参数d:(两个坐标系Z轴之间的距离)
        public bool jointMode;   // 关节运动方式(false为移动，true为转动)
    }
}
